Container 上的文件的生命週期相當短暫,使得在容器中運行重要應用時會出現一些問題。當Container 損壞時,kubelet會重啟它,但是容器中的文件將消失並以乾淨的最初狀態重新啟動。此外在Pod中同時運行多個容器時,這些容器之間通常需要共享文件。Kubernetes 透過Volume解決了這些問題。
以下將介紹幾個 Voulme 類型
當Pod被分配給節點時,首先創建 EmptyDir volume,並且只要該Pod在該節點上運行,該 Volume 就會存在。正如其名字所述,它最初是空的。Pod中的容器可以讀取和寫入emptyDir卷中的相同文件,儘管該卷可以掛載到每個容器中的相同或不同路徑上。當出於任何原因從節點中刪除Pod時,emptyDir中的數據將被永久刪除。
注意:容器崩潰不會從節點中移除pod,因此emptyDir卷中的數據在容器崩潰時是安全的。
emptyDir 的用法有:
以下我們建立一個 Pod 裡面有兩個 Container
$ kubectl create -f https://raw.githubusercontent.com/mhausenblas/kbe/master/specs/volumes/pod.yaml
pod/sharevol created
並且我們在第一個 Container 塞進一些假資料
$ kubectl exec sharevol -c c1 -i -t -- bash
[root@sharevol /]# mount | grep xchange
/dev/sda1 on /tmp/xchange type ext4 (rw,relatime,data=ordered)
[root@sharevol /]# echo 'some data' > /tmp/xchange/data
接下來我們進入 c2, 並且將 c2 container 掛載剛剛塞資料進去的 /tmp/data 資料
$ kubectl exec sharevol -c c2 -i -t -- bash
[root@sharevol /]# mount | grep /tmp/data
/dev/sda1 on /tmp/data type ext4 (rw,relatime,data=ordered)
[root@sharevol /]# cat /tmp/data/data
some data
可以看到c2可以將c1的資料載入並且加以讀取